﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

namespace Controllers
{
    public class TurnoController
    {
        public static List<Turno> ObtenerTodos(string where, int pagina,int cantidadRegistros)
        {
            var list = new List<Turno>();

            var sql = "Select TOP " + cantidadRegistros + " * From Superacidos.Turno";
            
            if (pagina > 1)
            {
                int limiteAnterior = (pagina - 1) * cantidadRegistros;

                var filtrospaginador = !string.IsNullOrEmpty(where)
                                       ? " Turno_Id NOT IN " + "(Select TOP " + limiteAnterior +
                                         " Turno_Id from Superacidos.Turno WHERE " + where +
                                         " ORDER BY Turno_Id) "
                                       : " Turno_Id NOT IN " + "(Select TOP " + limiteAnterior +
                                         " Turno_Id from Superacidos.Turno ORDER BY Turno_Id) ";

                if (!string.IsNullOrEmpty(where))
                {
                    where += " AND ";
                }
                where += filtrospaginador;
            }
            
            
            if (!string.IsNullOrEmpty(where))
            {
                sql += " WHERE " + where;
            }

            var reader = ConexionBaseDeDatos.GetData(sql, CommandType.Text);

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    list.Add(ObtenerObjeto(reader));
                }
            }

            return list;
        }

        public static List<Turno> ObtenerTodos(string where)
        {
            var list = new List<Turno>();
            var sql = "Select * From Superacidos.Turno";

            if (!string.IsNullOrEmpty(where))
            {
                sql += " WHERE " + where;
            }

            var reader = ConexionBaseDeDatos.GetData(sql, CommandType.Text);

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    list.Add(ObtenerObjeto(reader));
                }
            }

            return list;
        }

         
        public static int ObtenerCantidad(string where)
        {
            var sql = "Select count(*) as Cantidad From Superacidos.Turno";

            if (!string.IsNullOrEmpty(where))
            {
                sql += " WHERE " + where;
            }
            var cantidad = 0;
            var reader = ConexionBaseDeDatos.GetData(sql, CommandType.Text);

            if (reader.HasRows)
            {
                reader.Read();
                if (reader["Cantidad"] != DBNull.Value)
                    cantidad = (int)reader["Cantidad"];

            }

            return cantidad;
        }

        public static List<Turno> ObtenerTodosHabilitados(string where)
        {
            if (!string.IsNullOrEmpty(where))
            {
                where += " AND ";
            }
            where += " Turno_Habilitado = 1";

            return ObtenerTodos(where);
        }

        public static Turno ObtenerUno(int TurnoId)
        {
            var reader = ConexionBaseDeDatos.GetData("Select * From Superacidos.Turno Where Turno_Id = " + TurnoId, CommandType.Text);

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    return ObtenerObjeto(reader);
                }
            }
            return null;
            //return reader.HasRows ? ObtenerObjeto(reader) : null;
        }

        public static Turno ObtenerObjeto(OleDbDataReader reader)
        {
            //reader.Read();
            var Turno = new Turno();

            if (reader["Turno_Id"] != DBNull.Value)
                Turno.Turno_Id = (int)reader["Turno_Id"];
            if (reader["Turno_Descripcion"] != DBNull.Value)
                Turno.Turno_Descripcion = (string)reader["Turno_Descripcion"];
            if (reader["Turno_Hora_Fin"] != DBNull.Value)
                Turno.Turno_Hora_Fin = (decimal)reader["Turno_Hora_Fin"];
            if (reader["Turno_Hora_Inicio"] != DBNull.Value)
                Turno.Turno_Hora_Inicio = (decimal)reader["Turno_Hora_Inicio"];
            if (reader["Turno_Habilitado"] != DBNull.Value)
                Turno.Turno_Habilitado = (bool)reader["Turno_Habilitado"];
            if (reader["Turno_Valor_Bandera"] != DBNull.Value)
                Turno.Turno_Valor_Bandera = (decimal)reader["Turno_Valor_Bandera"];
            if (reader["Turno_Valor_Ficha"] != DBNull.Value)
                Turno.Turno_Valor_Ficha = (decimal)reader["Turno_Valor_Ficha"];

            return Turno;
        }

        public static void Agregar(Turno Turno)
        {
            var sql = "INSERT INTO SUPERACIDOS.Turno (Turno_Descripcion, Turno_Hora_Fin, Turno_Hora_Inicio, Turno_Valor_Bandera, Turno_Valor_Ficha," +
                      " Turno_Habilitado) " +
                      " VALUES ('{0}',{1},{2},{3},{4},{5})";

            sql = string.Format(sql, Turno.Turno_Descripcion, Turno.Turno_Hora_Fin, Turno.Turno_Hora_Inicio, Turno.Turno_Valor_Bandera,
                                     Turno.Turno_Valor_Ficha,
                                     Turno.Turno_Habilitado ? "1" : "0");


            ConexionBaseDeDatos.Guardar(sql, CommandType.Text);

        }

        public static void Modificar(Turno Turno)
        {
            var sql = "update SUPERACIDOS.Turno set Turno_Descripcion = '{0}' , Turno_Hora_Fin = {1}, Turno_Hora_Inicio = {2}, Turno_Valor_Bandera = {3}, " +
                      "Turno_Valor_Ficha = {4}, Turno_Habilitado = {5}" +
                      "where Turno_Id = {6}";

            sql = string.Format(sql, Turno.Turno_Descripcion, Turno.Turno_Hora_Fin, Turno.Turno_Hora_Inicio, Turno.Turno_Valor_Bandera.ToString().Replace(',', '.'),
                                     Turno.Turno_Valor_Ficha.ToString().Replace(',', '.'),
                                     Turno.Turno_Habilitado ? "1" : "0",
                                     Turno.Turno_Id);


            ConexionBaseDeDatos.Guardar(sql, CommandType.Text);

        }

        public static void Eliminar(int TurnoId)
        {
            var sql = "update SUPERACIDOS.Turno set Turno_habilitado = 0 where Turno_Id = " + TurnoId;
            ConexionBaseDeDatos.Guardar(sql, CommandType.Text);
        }

    }

}

